package com.tan.kotlintest.proxy.myproxy.dynamic;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/*
 * Copyright (C) 2018 重庆一聊高科技有限公司
 * 版权所有
 *
 * 功能描述：测试代理模式  代理公司  包含多个代理人员,一个代理人员代理一个产品
 * 客户(BuyerClient) -> 找到代理公司(ProxyCompany)购买产品 ->  代理公司分配代理人员(ProxyEmployee)
 *
 *
 * 类描述: 代理模式中的  "代理公司"
 *
 * 作者：txj
 * 创建时间：2018/9/14
 *
 * 修改人：
 * 修改描述：
 * 修改日期
 */
public class ProxyCompany implements InvocationHandler {

    //工厂  真实对象
    private Object mFactory;

    public void setFactory(Object factory) {
        mFactory = factory;
    }

    /**
     * 获得一个具体的代理人
     *
     * @return 具体的代理人
     */
    public Object getProxyInstance() {
        return Proxy.newProxyInstance(mFactory.getClass().getClassLoader(),
                mFactory.getClass().getInterfaces(),
                this);
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        doSthBefore();
        Object result = method.invoke(mFactory, args);
        doSthAfter();
        return result;
    }

    //功能增强
    private void doSthBefore() {
        System.out.println("售前服务");
    }

    //功能增强
    private void doSthAfter() {
        System.out.println("售后服务");
    }

}
